﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sy2_11
{
    public partial class Form1 : Form
    {
        int[] num;   // 存储随机数的数组
        int[] prime; // 存储素数的数组
        int primeCount = 0; // 素数的数量

        public Form1()
        {
            InitializeComponent();
            this.Text = "求素数";
            // 初始化“素数>>”按钮为禁用
            btnPrime.Enabled = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private bool IsPrime(int number)
        {
            // 小于2的数不是素数
            if (number < 2) return false;
            // 2是素数
            if (number == 2) return true;
            // 偶数不是素数
            if (number % 2 == 0) return false;

            // 检查从3到平方根的奇数是否能整除
            for (int i = 3; i <= Math.Sqrt(number); i += 2)
            {
                if (number % i == 0) return false;
            }
            return true;
        }

        // “<<产生”按钮点击事件
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            try
            {
                int n = int.Parse(txtCount.Text);
                int min = int.Parse(txtMin.Text);
                int max = int.Parse(txtMax.Text);

                // 初始化数组
                num = new int[n];
                prime = new int[n]; // 素数数组最大长度不超过随机数个数
                primeCount = 0;

                Random rnd = new Random();
                for (int i = 0; i < n; i++)
                {
                    num[i] = rnd.Next(min, max + 1);
                    // 判断是否为素数，若是则存入prime数组
                    if (IsPrime(num[i]))
                    {
                        prime[primeCount] = num[i];
                        primeCount++;
                    }
                }

                // 显示随机数（左侧文本框）
                txtLeft.Text = string.Join("\r\n", num);
                // 启用“素数>>”按钮
                btnPrime.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("输入格式错误，请输入整数！");
            }
        }

        // “素数>>”按钮点击事件
        private void btnPrime_Click(object sender, EventArgs e)
        {
            // 截取prime数组中有效部分（排除未使用的元素）
            int[] validPrimes = new int[primeCount];
            Array.Copy(prime, validPrimes, primeCount);
            // 显示素数（右侧文本框）
            txtRight.Text = string.Join("\r\n", validPrimes);
        }
    }
}

